# -*- coding: latin-1 -*-
from gestion.cuenta_corriente.models import ItemRecibo, Cheque
from tjango.listreport.listados import *
from datetime import *
from django import forms
from django.db.models import Q



def get_ingreso(obj,form):
	if form.cleaned_data['fecha_ingreso_inicio']:
		obj = obj.filter(entregas__fecha_ingreso__gte=form.cleaned_data['fecha_ingreso_inicio'])
	if form.cleaned_data['fecha_ingreso_fin']:
		obj = obj.filter(entregas__fecha_ingreso__lte=form.cleaned_data['fecha_ingreso_fin'])
	
	if form.cleaned_data['vencimiento_inicio']:
		obj = obj.filter(vencimiento__gte=form.cleaned_data['vencimiento_inicio'])
	if form.cleaned_data['vencimiento_fin']:
		obj = obj.filter(vencimiento__lte=form.cleaned_data['vencimiento_fin'])
	if form.cleaned_data['de']:
		obj = obj.filter(entregas__de__nombre__icontains=form.cleaned_data['de'])
		
	return obj
	
def get_egreso(obj,form):
	if form.cleaned_data['fecha_egreso_inicio']:
		obj = obj.filter(entregas__fecha_egreso__gte=form.cleaned_data['fecha_egreso_inicio'])
	if form.cleaned_data['fecha_egreso_fin']:
		obj = obj.filter(entregas__fecha_egreso__lte=form.cleaned_data['fecha_egreso_fin'])
	
	if form.cleaned_data['vencimiento_inicio']:
		obj = obj.filter(vencimiento__gte=form.cleaned_data['vencimiento_inicio'])
	if form.cleaned_data['vencimiento_fin']:
		obj = obj.filter(vencimiento__lte=form.cleaned_data['vencimiento_fin'])
		
	if form.cleaned_data['para']:
		obj = obj.filter(entregas__para__nombre__icontains=form.cleaned_data['para'])
	
	return obj

		
TIPOS = (
	('cartera','En cartera'),
	('entregados','Propios entregados'),
	('recyentr','Recibidos y entregados'),
)	
class Cheques_activos(Report):
	
	class ReportForm(forms.Form):
		cheques = forms.ChoiceField(choices=TIPOS,)
		fecha_ingreso_inicio = forms.DateField(required=False)
		fecha_ingreso_fin = forms.DateField(required=False)
		fecha_egreso_inicio = forms.DateField(required=False)
		fecha_egreso_fin = forms.DateField(required=False)
		vencimiento_inicio = forms.DateField(required=False)
		vencimiento_fin = forms.DateField(required=False)
		de = forms.CharField(max_length=20,required=False)
		para = forms.CharField(max_length=20,required=False)
		
	def select(self):
		return F('', items= [
				F('vencimiento'),
				F('banco'),
				F('importe'),
				F('numero'),
				F('fecha_ingreso'),
				F('fecha_egreso'),
				F('de'),
				F('para')
				])
				
	def query(self,form):
		
		checks = []
		if form.cleaned_data['cheques'] == 'cartera':
 			checks = Cheque.objects.filter(Q(entregas__a_pagar__pago__es_ingreso=True)&Q(entregas__fecha_egreso__isnull =True)).distinct()
			checks = get_ingreso(checks,form)
				
		elif form.cleaned_data['cheques'] == 'entregados':
				
 			checks = Cheque.objects.filter(Q(entregas__a_pagar__pago__es_ingreso=False)&Q(entregas__fecha_ingreso__isnull=True)).distinct()
			checks = get_egreso(checks,form)
		else :
			ch = Cheque.objects.filter(Q(entregas__fecha_ingreso__isnull=False)&Q(entregas__fecha_egreso__isnull=False))
			ch = get_egreso(ch,form)
			ch = get_ingreso(ch,form)
				
			checks = ch
	
		return checks